package com.enation.app.javashop.core.goods.service;

import com.enation.app.javashop.core.goods.model.dos.GoodsDO;
import com.enation.app.javashop.core.goods.model.dos.GoodsSkuDO;
import com.enation.app.javashop.core.goods.model.vo.GoodsSkuVO;
import com.enation.app.javashop.framework.database.Page;

import java.util.List;

/**
 * 商品sku业务层
 * 
 * @author fk
 * @version v2.0
 * @since v7.0.0 2018-03-21 11:48:40
 */
public interface GoodsSkuManager {

	/**
	 * 查询商品sku列表
	 * 
	 * @param page
	 *            页码
	 * @param pageSize
	 *            每页数量
	 * @return Page
	 */
	Page list(int page, int pageSize);

	/**
	 * 添加商品sku
	 * 
	 * @param goodsSku
	 *            商品sku
	 * @return GoodsSku 商品sku
	 */
	GoodsSkuDO add(GoodsSkuDO goodsSku);

	/**
	 * 修改商品sku
	 * 
	 * @param goodsSku
	 *            商品sku
	 * @param id
	 *            商品sku主键
	 * @return GoodsSku 商品sku
	 */
	GoodsSkuDO edit(GoodsSkuDO goodsSku, Integer id);

	/**
	 * 删除商品sku
	 * 
	 * @param id
	 *            商品sku主键
	 */
	void delete(Integer id);

	/**
	 * 获取商品sku
	 * 
	 * @param id
	 *            商品sku主键
	 * @return GoodsSku 商品sku
	 */
	GoodsSkuDO getModel(Integer id);

	/**
	 * 添加商品sku
	 * 
	 * @param skuList
	 * @param goods
	 */
	void add(List<GoodsSkuVO> skuList, GoodsDO goods);

	/**
	 * 修改商品sku
	 * @param skuList
	 * @param goods
	 * @param hasChanged
	 */
	void edit(List<GoodsSkuVO> skuList, GoodsDO goods, Integer hasChanged);

	/**
	 * 删除商品关联的sku
	 * @param goodsIds
	 */
	void delete(Integer[] goodsIds);

	/**
	 * 查询某商品的sku
	 * @param goodsId
	 * @return
	 */
	List<GoodsSkuVO> listByGoodsId(Integer goodsId);

	/**
	 * 缓存中查询sku信息
	 * @param skuId
	 * @return
	 */
	GoodsSkuVO getSkuFromCache(Integer skuId);

	/**
	 * 查询某商家的可售卖的商品的sku集合
	 * @return
	 */
	List<GoodsSkuDO> querySellerAllSku();

	/**
	 * 判断商品是否都是某商家的商品
	 * @param skuIds
	 * @return
	 */
	void checkSellerGoodsCount(Integer[] skuIds);

}